class Solution {
    //编写一个算法来判断一个数 n 是不是快乐数。
    //「快乐数」 定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
    // 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
    //如果这个过程 结果为 1，那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ；不是，则返回 false 。
    //示例 1：输入：n = 19 输出：true 解释：1 + 81 = 82 64 + 4 = 68 36 + 64 = 100 1 + 0 + 0 = 1
    //示例 2：输入：n = 2 输出：false
    public boolean isHappy(int n) {
        int slow = n;
        int fast = n;
        slow = step(slow);
        fast = step(fast);
        fast = step(fast);
        while(slow != fast){
            //slow走一步， fast走两步
            slow = step(slow);
            fast = step(fast);
            fast = step(fast);
        }
        //跳出循环时，fast == slow
        return fast == 1;
    }
    private int step(int n){
        int sum = 0;
        while(n > 0){
            int tmp = n % 10;
            sum += (tmp * tmp);
            n /= 10;
        }
        return sum;
    }
}
